﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EntitiesLayer;
using System.Collections;
using System.Transactions;
using System.Data.SqlClient;
using System.Data;
using DAL.Repositories;
using DAL;

namespace DAL.Repositories
{
    public class PagoRepository : IRepository<Pago>
    {
        private List<Pago> _insertItems { get; set; }
        private List<Pago> _updateItems { get; set; }


        public PagoRepository()
        {
            _insertItems = new List<Pago>();
            _updateItems = new List<Pago>();
        }

        public void Insert(Pago entity)
        {
            _insertItems.Add(entity);
        }

        public void Delete(Pago entity)
        {
            throw new NotImplementedException();
        }

        public void Update(Pago entity)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Pago> GetAll()
        {
            return null;
        }

        public Pago GetById(int id)
        {
            return null;
        }

        public void Save()
        {
            using (TransactionScope scope = new TransactionScope())
            {
                try
                {
                    if (_insertItems.Count > 0)
                    {
                        foreach (Pago objPago in _insertItems)
                        {
                            InsertPago(objPago);
                        }
                    }
                    scope.Complete();
                }
                catch (ApplicationException ex)
                {
                }
                finally
                {
                    Clear();
                }
            }
        }

        public void Clear()
        {
            _insertItems.Clear();
        }

        public IEnumerable<Pago> GetUsuarios(int ptipo)
        {
            throw new NotImplementedException();
        }

        public Pago getUltimoPagoUsuario(Usuario pusuario)
        {
            Pago pago = null;
            int idUsaurio = pusuario.Id;
            try
            {
                SqlCommand sql = new SqlCommand();
                sql.Parameters.Add(new SqlParameter("@idUsuario", idUsaurio));
                DataSet ds = DBAccess.ExecuteSPWithDS(ref sql, "pa_ultimo_pago_usuario");

                if (ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                        pago = new Pago()
                        {
                            Id = Convert.ToInt16(dr["id"]),
                            TipoPago = Convert.ToInt16(dr["tipo"]),
                             FechaPago= dr["fecha_hora_pago"].ToString(),
                             FechaFin = dr["fecha_fin"].ToString(),
                            totalPago = Convert.ToDouble(dr["total_pago"])
                        };
                    }
                }
            }
            catch (Exception)
            {
                //viva la excepcion
            }
            return pago;
        }

        private void InsertPago(Pago objPago)
        {
            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Parameters.Add(new SqlParameter("@id_usuario", objPago.IdUsuario));
                cmd.Parameters.Add(new SqlParameter("@tipo", objPago.FormaPago));
                cmd.Parameters.Add(new SqlParameter("@forma_pago", objPago.TipoPago));
                cmd.Parameters.Add(new SqlParameter("@fecha_hora_pago", Convert.ToDateTime(objPago.FechaPago)));
                cmd.Parameters.Add(new SqlParameter("@fecha_fin", Convert.ToDateTime(objPago.FechaFin)));
                cmd.Parameters.Add(new SqlParameter("@total_pago", objPago.totalPago));
                DataSet ds = DBAccess.ExecuteSPWithDS(ref cmd, "pa_registrar_pago");
            }
            catch (Exception ex)
            {
                //aqui va la excepcion
            }
        }

        public void registrarTarjeta(String pnombreTarjeta, String pnumeroTarjeta, String pcodigoSeguridad, String pfechaVencimiento)
        {
            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Parameters.Add(new SqlParameter("@nombre_tarjeta", pnombreTarjeta));
                cmd.Parameters.Add(new SqlParameter("@numero_tarjeta", pnumeroTarjeta));
                cmd.Parameters.Add(new SqlParameter("@codigo_seguridad", pcodigoSeguridad));
                cmd.Parameters.Add(new SqlParameter("@fecha_vencimieno", pfechaVencimiento));

                DataSet ds = DBAccess.ExecuteSPWithDS(ref cmd, "pa_registrar_tarjeta");

            }
            catch (Exception ex)
            {
                //aqui va la excepcion
            }
        }
    }
}
